问题
在SystemUI里添加了一个broadcastReceiver,需求接收到消息后弹出一个用户提示
实现代码也很简单,
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle(R.string.device_temp_high)
.setMessage(warn_format)
.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
}).setCancelable(false).create().show();
但实际上,这个mContext只能从onReceive(Context context, Intent intent)获取到一个。而这个Context
根本无法更新UI。关于Context
的具体讨论见:带你掌握Android Context
所以,运行时会报出如下错误:
Unable to add window — token null is not for an application”
拿不到Context
,emmm,怎么弹出这个对话框呢?
还好,Android系统留了一些后手。
将其转换成全局AlertDialog也很简单。
首先,对AlertDialog添加SYSTEM_ALERT类型
AlertDialog dlg = builder.create();
dlg.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dlg.show();
其次,增加对应权限
这样弹窗就变成系统的弹窗了。
TYPE_SYSTEM_ALERT
草稿整理中.. TBC..